﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Configuration;
using Entidades.Reportes;
using System.Data;

namespace Persistencia.Reportes
{
    public class PerReportes : Persistencia.General.IPersistencia
    {
        #region Miembros de IPersistencia

        public void Insertar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Actualizar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public void Eliminar(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public Entidades.General.IEntidad Obtener(Entidades.General.IEntidad entidad)
        {
            throw new NotImplementedException();
        }

        public List<Entidades.General.IEntidad> ObtenerTodos(Entidades.General.IEntidad entidad)
        {
            OracleCommand comando = null;
            OracleConnection conexion = new OracleConnection(ConfigurationManager.ConnectionStrings["conString"].ConnectionString);
            OracleDataReader lector = null;
            EntReportes ent = null;
            List<Entidades.General.IEntidad> lista = new List<Entidades.General.IEntidad>();

            try
            {
                if (((EntReportes)entidad).TipoReporte.Contains("1") || ((EntReportes)entidad).TipoReporte.Contains("2") || ((EntReportes)entidad).TipoReporte.Contains("3") || ((EntReportes)entidad).TipoReporte.Contains("4")
                    || ((EntReportes)entidad).TipoReporte.Contains("5") || ((EntReportes)entidad).TipoReporte.Contains("6") || ((EntReportes)entidad).TipoReporte.Contains("7"))
                    comando = new OracleCommand("PKG_REPORTES.rptPortadaExpediente", conexion);
                else
                    comando = new OracleCommand("PKG_REPORTES.permiso_paso", conexion);

                comando.CommandType = System.Data.CommandType.StoredProcedure;

                conexion.Open();

                OracleParameter parametro1 = new OracleParameter();
                parametro1.OracleDbType = OracleDbType.Varchar2;
                parametro1.Value = (string.IsNullOrWhiteSpace(((EntReportes)entidad).ListAfectados) ? null : ((EntReportes)entidad).ListAfectados);
                parametro1.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro1);

                OracleParameter parametro2 = new OracleParameter();
                parametro2.OracleDbType = OracleDbType.Varchar2;
                parametro2.Value = (string.IsNullOrWhiteSpace(((EntReportes)entidad).CveObra) ? null : ((EntReportes)entidad).CveObra);
                parametro2.Direction = ParameterDirection.Input;
                comando.Parameters.Add(parametro2);

                OracleParameter cursor = new OracleParameter();
                cursor.OracleDbType = OracleDbType.RefCursor;
                cursor.Direction = ParameterDirection.Output;
                comando.Parameters.Add(cursor);

                lector = comando.ExecuteReader(CommandBehavior.CloseConnection);

                while (lector.Read())
                {
                    ent = new EntReportes();
                    ent.Denominado = lector["denominado"].ToString();
                    ent.Norte = lector["norte"].ToString();
                    ent.Sur = lector["sur"].ToString();
                    ent.Este = lector["este"].ToString();
                    ent.Oeste = lector["oeste"].ToString();
                    ent.Superficie = lector["superficie"].ToString();
                    ent.Acreditado = lector["acreditado"].ToString();
                    ent.NoAcreditado = lector["acreditado_no"].ToString();
                    ent.Fecha = lector["fecha"].ToString(); //FEcha Acreditado
                    ent.NoExpediente = lector["no_expediente"].ToString();
                    ent.Nombre = lector["nombre_completo"].ToString();
                    ent.Rfc = lector["rfc"].ToString();
                    ent.Ife = lector["clave_elector"].ToString();
                    ent.Municipio = lector["municipio"].ToString();
                    ent.Localidad = lector["localidad"].ToString();
                    ent.TipoReclamo = lector["tipo_reclamo"].ToString();
                    ent.Monto = lector["monto"].ToString();
                    ent.Obra = lector["desc_obra"].ToString();
                    ent.KmInicio = lector["inicio"].ToString();
                    ent.KmDestino = lector["destino"].ToString();

                    ent.Longitud = lector["longitud"].ToString();
                    ent.AnchoDerechoVia = lector["ANCHO_DERECHO_VIA"].ToString();
                    ent.SuperficieAfectada = lector["superficie_afectada"].ToString();
                    ent.NoOficio = lector["no_oficio"].ToString();
                    ent.FechaOficio = lector["fecha_oficio"].ToString();
                    ent.AreaSolicitante = lector["area_solicitante"].ToString();
                    ent.SupervisorAutorizado = lector["SUPERVISOR_AUTORIZADO"].ToString();
                    ent.FichaSupervisor = lector["FICHA_SUPERVISOR"].ToString();
                    ent.CedulaGestor = lector["CEDULA_SUPERVISOR"].ToString();
                    ent.Gestor = lector["GESTOR"].ToString();
                    ent.FichaGestor = lector["FICHA_GESTOR"].ToString();

                    ent.CedulaGestor = lector["CEDULA_GESTOR"].ToString();
                    ent.Observaciones = lector["observaciones"].ToString();
                    ent.FechaObtencionPaso = lector["FECHA_OBTENCION_PER_PASO"].ToString();
                    ent.ExpedienteSIARP = lector["CveObraSiarp"].ToString();

                    lista.Add(ent);
                }
            }
            catch (OracleException exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.CriteriosObtenerTodos";
                throw excepcion;
            }
            catch (Exception exc)
            {
                ApplicationException excepcion = new ApplicationException("Se genero un error de ejecucion del procedimiento almacenado con el siguiente mensaje: \\n" + exc.Message);
                excepcion.Source = "PerUsuario.CriteriosObtenerTodos";
                throw excepcion;
            }
            finally
            {
                if (conexion.State == ConnectionState.Open)
                    conexion.Close();

                comando = null;

                if (lector != null)
                    lector.Close();
            }
            return lista;
        }

        public List<Entidades.General.IEntidad> ObtenerTodos()
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}
